package br.edu.fateczl.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import br.edu.fateczl.model.Emprestimo;

public class EmprestimoDAO {
	
Connection c;
	
	public EmprestimoDAO(){
		GenericDAO gDao = new GenericDAO();
		c = gDao.getConnection();
	}
	public boolean insereEmprestimo(Emprestimo emprestimo){
		boolean inserido = false;
		String sql = "INSERT INTO emprestimo (codigo,data_emprestimo,data_devolucao,data_previsao,multa,devolvido) VALUES (?,?,?,?,?,?)";
		
		try{
			PreparedStatement ps = c.prepareStatement(sql);
			ps.setInt(1, emprestimo.getCodigo());
			ps.setDate(2, (Date) emprestimo.getDataEmprestimo());
			ps.setDate(3, (Date) emprestimo.getDataDevolucao());
			ps.setDate(4, (Date) emprestimo.getDataPrevisao());
			ps.setInt(5, emprestimo.getMulta());
			ps.setBoolean(6, emprestimo.getDevolvido());
			ps.execute();
			ps.close();
			inserido = true;
		}catch(SQLException e){
			JOptionPane.showMessageDialog(null,e.getMessage(),"Erro",JOptionPane.ERROR_MESSAGE);
		}
		return inserido;
	}
	public boolean atualizaEmprestimo(Emprestimo emprestimo){
		boolean atualizado= false;
		String sql = "UPDATE emprestimo Set codigo,data_emprestimo,data_devolucao,data_previsao,multa,devolvido WHERE codigo = ?";
		try {
			PreparedStatement ps = c.prepareStatement(sql);
			ps.setInt(1, emprestimo.getCodigo());
			ps.setDate(2, (Date) emprestimo.getDataEmprestimo());
			ps.setDate(3, (Date) emprestimo.getDataDevolucao());
			ps.setDate(4, (Date) emprestimo.getDataPrevisao());
			ps.setInt(5, emprestimo.getMulta());
			ps.setBoolean(6, emprestimo.getDevolvido());
			ps.execute();
			ps.close();
			atualizado = true;
		}catch(SQLException e){
			JOptionPane.showMessageDialog(null,e.getMessage(),"Erro",JOptionPane.ERROR_MESSAGE);
		}
		return atualizado;
		
	}
	public boolean excluiEmprestimo(Emprestimo emprestimo){
		boolean excluido = false;
		String sql = "DELETE emprestimo WHERE codigo = ?";
		try {
			PreparedStatement ps = c.prepareStatement(sql);
			ps.execute();
			ps.close();
			excluido = true;
		}catch(SQLException e){
			JOptionPane.showMessageDialog(null,e.getMessage(),"Erro",JOptionPane.ERROR_MESSAGE);
		}
		return excluido;
	}
	public Emprestimo consultaEmprestimo(Emprestimo emprestimo){
		Emprestimo emprestimoConsultado = new Emprestimo();
		String sql = "SELECT codigo,data_emprestimo,data_devolucao,data_previsao,multa,devolvido FROM emprestimo Where codigo = ?";
		try {
			PreparedStatement ps = c.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();
			if(rs.next()){
				emprestimoConsultado.setCodigo(rs.getInt("codigo"));
				emprestimoConsultado.setDataEmprestimo(rs.getDate("data_emprestimo"));
				emprestimoConsultado.setDataDevolucao(rs.getDate("data_devolucao"));
				emprestimoConsultado.setDataPrevisao(rs.getDate("data_previsao"));
				emprestimoConsultado.setMulta(rs.getInt("multa"));
				emprestimoConsultado.setDevolvido(rs.getBoolean("devolvido"));
			}
			rs.close();
			ps.close();
		}catch(SQLException e){
			JOptionPane.showMessageDialog(null,e.getMessage(),"Erro",JOptionPane.ERROR_MESSAGE);
		}
		return emprestimoConsultado;
	}
	
	public List<Emprestimo> consultaListaEmprestimo(){
		List<Emprestimo> listaEmprestimo = new ArrayList<Emprestimo>();
		StringBuffer sql = new StringBuffer();
		sql.append("SELECT codigo,data_emprestimo,data_devolucao,data_previsao,multa,devolvido ");
		sql.append("FROM emprestimo");
		try {
			PreparedStatement ps = c.prepareStatement(sql.toString());
			ResultSet rs = ps.executeQuery();
			while(rs.next()){
				Emprestimo emprestimoConsultado = new Emprestimo();
				emprestimoConsultado.setCodigo(rs.getInt("codigo"));
				emprestimoConsultado.setDataEmprestimo(rs.getDate("data_emprestimo"));
				emprestimoConsultado.setDataDevolucao(rs.getDate("data_devolucao"));
				emprestimoConsultado.setDataPrevisao(rs.getDate("data_previsao"));
				emprestimoConsultado.setMulta(rs.getInt("multa"));
				emprestimoConsultado.setDevolvido(rs.getBoolean("devolvido"));
				listaEmprestimo.add(emprestimoConsultado);
			}
			rs.close();
			ps.close();
		}catch(SQLException e){
			JOptionPane.showMessageDialog(null,e.getMessage(),"Erro",JOptionPane.ERROR_MESSAGE);
		}
		return listaEmprestimo;
	}

}
